package com.yc.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yc.entity.AttendanceRecords;
import com.yc.vo.AttendanceHistory;
import java.util.List;

import com.yc.vo.Result;
import com.yc.vo.StudentAttendanceRecord;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

/**
 * 考勤详情表;(attendance_records)表服务接口
 * @date : 2023-6-28
 */
public interface AttendanceRecordsService{

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    AttendanceRecords queryById(Integer id);

    /**
     * 分页查询
     *
     * @param attendanceHistory 筛选条件
     * @param current 当前页码
     * @param size  每页大小
     * @return
     */
    Page<AttendanceRecords> paginQuery(AttendanceHistory attendanceHistory, long current, long size);
    /**
     * 新增数据
     *
     * @param attendanceRecords 实例对象
     * @return 实例对象
     */
    boolean insert(List<AttendanceRecords> attendanceRecords,String id);
    /**
     * 更新数据
     *
     * @param attendanceRecords 实例对象
     * @return 实例对象
     */
    AttendanceRecords update(AttendanceRecords attendanceRecords);
    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

    /**
     * 统计当前学年的旷课、请假、早退情况
     * @return
     */
    Map<String, Object> selectAllAttendanceByStudent(String stuid, String beginDate, String endDate);

    /**
     * 获取当天的考勤记录
     * @param stuid 学生学号
     * @param date 当天日期
     * @return 当天的考勤情况
     */
    Map<String,List<StudentAttendanceRecord>> selectAttendanceByStuidAndDate( String stuid, String date);

    /**
     * 获取当月的考勤记录
     * @param stuid 学生学号
     * @param date 当月日期
     * @return 学生当月的考勤记录
     */
    Map<String, List<StudentAttendanceRecord>> selectMonthAttendanceByStuidAndDate(String stuid,  String date);

    /**
     * 通过学号获取该学生当月的上课状态
     * @param stuid 学生学号
     * @param date  当月日期
     * @return  学生当月的上课状态
     */
    Map<String, List<StudentAttendanceRecord>> selectMonthStatusByStuidAndDate(@Param("stuid") String stuid, @Param("date") String date);

    /**
     *@Description 查询指定班级的所有考勤信息
     *@Return
     *@Author dm
     *@Date Created in 2023/7/26 19:34
     **/
    Result queryHistory(AttendanceHistory attendanceHistory,Integer pageNum,Integer pageSize);

    /**
     * 批量添加学生手动考勤记录
     * @param attendanceRecordsList 学生考勤记录集合
     * @param username 老师工号
     */
    void addAttendanceRecords(List<AttendanceRecords> attendanceRecordsList, String username);

    /**
     * 批量修改学生手动考勤记录
     * @param attendanceRecordsList 学生考勤记录集合
     * @param username 老师工号
     * @return 成功 0失败
     */
    int modifyAttendanceRecords(List<AttendanceRecords> attendanceRecordsList, String username);

    /**
     * 统计每个月的考勤记录
     * @param stuid 学生学号
     * @param status 考勤状态
     * @return
     */
    List<Map<String, Object>> selectPerMonthAttendance(String stuid, String status, String beginDate, String endDate);

    /**
     * 查询每学年的起始时间 和 结束时间
     * @param date 学年起始时间
     * @return 起始时间 和 结束时间
     */
    List<String> selectNowSchoolYear(Integer date);
}
